package com.wenx.v3system.modular.cloud.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wenx.base.rest.BaseRestService;
import com.wenx.v3system.modular.cloud.domain.dto.SysTeamDto;
import com.wenx.v3system.modular.cloud.domain.po.SysTeam;
import com.wenx.v3system.modular.cloud.domain.query.SysTeamQuery;

import java.util.List;

/**
 * 系统团队服务接口
 * 基于Enhanced RBAC权限模型
 * 提供团队管理、成员管理和角色分配功能
 * 
 * @author wenx
 * @since 1.0.0
 */
public interface SysTeamRestService extends IService<SysTeam>, BaseRestService<SysTeamDto, SysTeamQuery> {

    /**
     * 批量删除团队
     * 
     * @param ids 团队ID列表
     */
    void batchDelete(List<Long> ids);

    /**
     * 分页获取团队成员
     * 
     * @param teamId 团队ID
     * @param current 当前页
     * @param size 页大小
     * @param keyword 搜索关键词
     * @return 分页结果
     */
    Object getTeamMembersPage(Long teamId, Integer current, Integer size, String keyword);


    /**
     * 获取用户所属团队列表
     * 
     * @param userId 用户ID
     * @return 团队列表
     */
    List<SysTeamDto> getUserTeams(Long userId);

    /**
     * 获取团队成员列表
     * 
     * @param teamId 团队ID
     * @return 成员用户ID列表
     */
    List<Long> getTeamMembers(Long teamId);

    /**
     * 为团队添加成员
     * 
     * @param teamId 团队ID
     * @param userIds 用户ID列表
     */
    void addTeamMembers(Long teamId, List<Long> userIds);

    /**
     * 从团队移除成员
     * 
     * @param teamId 团队ID
     * @param userIds 用户ID列表
     */
    void removeTeamMembers(Long teamId, List<Long> userIds);

    /**
     * 检查团队编码是否存在
     * 
     * @param code 团队编码
     * @param excludeId 排除的团队ID
     * @return 是否存在
     */
    boolean checkTeamCode(String code, Long excludeId);

    /**
     * 获取团队树结构
     * 
     * @param parentId 父团队ID
     * @return 团队树
     */
    List<SysTeamDto> getTeamTree(Long parentId);

    /**
     * 获取用户可加入的团队列表
     * 
     * @param userId 用户ID
     * @return 团队列表
     */
    List<SysTeamDto> getAvailableTeams(Long userId);
}